package com.cbw.wx.controller;

import com.cbw.bean.Message;
import com.cbw.bean.User;
import com.cbw.mvc.ResponseBody;
import com.cbw.service.CourierService;
import com.cbw.util.JSONUtil;
import com.cbw.util.RandomUtil;
import com.cbw.util.SMSUtil;
import com.cbw.util.UserUtil;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.sql.Timestamp;
import java.util.Date;

/**
 * Controller处理请求
 * 1.接收参数
 * 2.调用service,接收返回值
 * 3.填充消息对象
 * 4.json处理
 * 5.return json
 */
public class UserController {

    /**
     * 微信端登录时 发送验证码短信 到指定手机
     * @param request
     * @param response
     * @return
     */
    @ResponseBody("/wx/loginSms.do")
    public String sendSms(HttpServletRequest request, HttpServletResponse response){
        //接收微信端传递来的手机号
        String userPhone = request.getParameter("userPhone");
        //获取6位数验证码
        String code = RandomUtil.getCode()+"";
        System.out.println("系统产生的验证码是:"+code);
        //调用SMSUtil方法，向userPhone发送验证码短信
        boolean flag = SMSUtil.loginSMS(userPhone, code);
        //填充消息对象
        Message msg = new Message();
        if (flag){
            //短信发送成功
            msg.setStatus(0);
            msg.setResult("验证码已发送，请查收");
        }else {
            //短信发送失败
            msg.setStatus(-1);
            msg.setResult("验证码发送失败，请检查手机号或稍后再试");
        }
        //发送完短信后，向session中存储手机号和生成的验证码，用于与输入框输入的验证码进行比较，决定是否允许登录
        UserUtil.setLoginSms(request.getSession(),userPhone,code);
        String json = JSONUtil.toJSON(msg);
        return json;
    }

    /**
     * 登录
     * 需要验证输入的验证码是否与服务器发送的验证码一致
     * @param request
     * @param response
     * @return
     */
    @ResponseBody("/wx/login.do")
    public String login(HttpServletRequest request, HttpServletResponse response){
        //接收参数 (微信端传来的手机和验证码)
        String userPhone = request.getParameter("userPhone");
        String userCode = request.getParameter("code");
        //从session获取系统产生的验证码(短信验证码)
        String sysCode = UserUtil.getLoginSms(request.getSession(), userPhone);
        //准备消息对象
        Message msg = new Message();
        User user = new User();
        //验证码校验
        if (sysCode==null){
            //这个手机号未获取短信验证码
            msg.setStatus(-1);
            msg.setResult("手机号码未获取到短信");
        }else if (sysCode.equals(userCode)){
            //验证码一致，登录成功
            //判断是快递员还是用户
            if (CourierService.findByPhone(userPhone)!=null){
                //是快递员
                msg.setStatus(1);
                user.setUser(false);//非用户
            }else {
                //用户
                msg.setStatus(0);
                user.setUser(true);
            }

            //将用户信息(手机)存入session

            user.setUserPhone(userPhone);
            //user.setLastTime((Timestamp) new Date());
            UserUtil.setWxUser(request.getSession(),user);
        }else {
            //验证码不一致，登录失败
            msg.setStatus(-2);
            msg.setResult("验证码不一致，登录失败");
        }
        //消息对象转json
        String json = JSONUtil.toJSON(msg);
        return json;
    }

    /**
     * 显示登录用户的信息
     * @param request
     * @param response
     * @return
     */
    @ResponseBody("/wx/userInfo.do")
    public String userInfo(HttpServletRequest request, HttpServletResponse response){
        //接收参数:从session中获取用户
        User wxUser = UserUtil.getWxUser(request.getSession());
        //消息对象
        Message msg = new Message();
        //判断是用户还是快递员
        boolean flag = wxUser.isUser();
        if (flag){
            msg.setStatus(0);//登录者是用户
        }else {
            msg.setStatus(1);//登陆者是快递员
        }
        msg.setResult(wxUser.getUserPhone());
        return JSONUtil.toJSON(msg);
    }

    /**
     * 退出登录
     * @param request
     * @param response
     * @return
     */
    @ResponseBody("/wx/out.do")
    public String out(HttpServletRequest request, HttpServletResponse response){
        //销毁session
        request.getSession().invalidate();
        //给客户端回复消息
        Message msg = new Message(0);
        return JSONUtil.toJSON(msg);
    }

}
